package greedy.onClass.class2.exer05;

import java.util.Scanner;

public class Main {
    static int len = 0; // 存储最长子序列的长度
    static int[] max = new int[101]; // 存储最长子序列

    static int cmp(int a, int b) {
        return (a > b) ? a : b;
    }

    static int res(int[] a, int n) {
        int x = 1; // 当前上升子序列长度
        int y = 1; // 当前下降子序列长度
        for (int i = 1; i < n; i++) {
            if (a[i] > a[i - 1]) {
                x = y + 1; // 上升子序列长度为前一个下降子序列长度加1
                if (len == 0 || a[i - 1] < max[len - 1]) {
                    max[len++] = a[i - 1]; // 添加前一个下降子序列的末尾元素到结果数组中
                }
            }
            if (a[i] < a[i - 1]) {
                y = x + 1; // 下降子序列长度为前一个上升子序列长度加1
                if (len == 0 || a[i - 1] > max[len - 1]) {
                    max[len++] = a[i - 1]; // 添加前一个上升子序列的末尾元素到结果数组中
                }
            }
        }
        max[len++] = a[n - 1]; // 最后一个元素
        return cmp(x, y); // 返回最大值
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] a = new int[101];
        int n = 0;
        while (scanner.hasNextInt()) {
            a[n++] = scanner.nextInt();
        }
        scanner.close();

        if (n < 2) {
            System.out.println(a[0]);
            System.out.println(1);
            return;
        }

        int result = res(a, n);
        for (int i = 0; i < len - 1; i++) {
            System.out.print(max[i] + " ");
        }
        System.out.println(max[len - 1]);
        System.out.println(len);
    }
}
